package com.dries.chat.netty;

import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.handler.timeout.IdleState;
import io.netty.handler.timeout.IdleStateEvent;
import lombok.extern.slf4j.Slf4j;

/**
 * @Description: 用于监测channel的心跳handler
 * @Author ZSY
 * @createTime 2020/7/13 16:07
 */
@Slf4j
public class HeartBeatHandler extends ChannelInboundHandlerAdapter {

    @Override
    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
        // 判断evt 是否是IdleStateEvent（用于触发用户事件，包含 读空闲/写空闲/读写空闲）
        if (evt instanceof IdleStateEvent) {
            // 强制类型转换
            IdleStateEvent event = (IdleStateEvent) evt;

            if (event.state() == IdleState.READER_IDLE) {
                log.info("【进入读空闲。。。。。。。】");
            } else if (event.state() == IdleState.WRITER_IDLE) {
                log.info("【进入写空闲。。。。。。。】");
            } else if (event.state() == IdleState.ALL_IDLE) {
                log.info("【进入读写空闲。。。。。。。】");
                // 关闭无用的channel
                ctx.channel().close();
                log.info("【当前在线人数：{}】", WSServerHandler.channelGroup.size());

            }
      }
    }
}
